package com.meituan.sdk.model.ddzh.yuding.createandprepayorder;

import com.meituan.sdk.annotations.ApiMeta;
import com.google.gson.reflect.TypeToken;
import javax.validation.constraints.NotBlank;
import java.lang.reflect.Type;
import com.meituan.sdk.internal.utils.JsonUtil;
import com.google.gson.annotations.SerializedName;
import javax.validation.constraints.NotNull;
import com.meituan.sdk.MeituanResponse;
import com.meituan.sdk.MeituanRequest;

/**
* 下单并预支付
* This file was automatically generated.
*/
@ApiMeta(
    path = "/ddzh/yuding/createandprepayorder",
    businessId = 58,
    apiVersion = "10015",
    apiName = "createandprepayorder",
    needAuth = true
)
public class CreateandprepayorderRequest implements MeituanRequest<CreateandprepayorderResponse> {
    /**
    * <p data-diff-id="ct-diff-id-1b82a123-3948-41aa-89aa-924861a52310"><span style="color: rgb(31, 45, 61)">美团侧skuId</span></p>
    */
    @NotBlank(message = "productItemId不能为空")
    @SerializedName("productItemId")
    private String productItemId;
    /**
    * <p data-diff-id="ct-diff-id-04521181-4ece-4466-9a06-93e07d1f506a"><span style="color: rgb(31, 45, 61)">商家透传信息，美团落地到订单上(Json字符串，商家侧传用户填写的搬家信息)&nbsp;</span></p>
    */
    @NotBlank(message = "thirdPartyFulfillInfo不能为空")
    @SerializedName("thirdPartyFulfillInfo")
    private String thirdPartyFulfillInfo;
    /**
    * <p data-diff-id="ct-diff-id-0dc44753-6578-4ce1-a2b1-900c938a1034"><span style="color: rgb(31, 45, 61)">商家透传自定义支付参数，美团落地到支付单，支付结果通知商家时回传(Json字符串，商家可以通过回传的该信息，来识别是哪一次支付。 &nbsp;也可以在其中设置微信代金券标识goodsTag等信息，会透传到美团支付侧 &nbsp;示例：thirdPartyPaymentInfo="{\"goodsTag\":\"1111\",\"otherInfo\":\"xxx\"}")&nbsp;</span></p>
    */
    @NotBlank(message = "thirdPartyPaymentInfo不能为空")
    @SerializedName("thirdPartyPaymentInfo")
    private String thirdPartyPaymentInfo;
    /**
    * <p data-diff-id="ct-diff-id-b6258181-84ff-4ce9-90ce-e543b4500a54"><span style="color: rgb(31, 45, 61)">通用业务参数加密串；注意：对接北极星时，加密密钥为</span><span style="color: rgba(0, 0, 0, 0.87)">appsecret；对接合作中心时，加密密钥为developerId。</span></p>
    */
    @NotBlank(message = "generalBizData不能为空")
    @SerializedName("generalBizData")
    private String generalBizData;
    /**
    * <p data-diff-id="ct-diff-id-7a13894f-d5cb-4327-a929-4d373a0330a0"><span style="color: rgb(31, 45, 61)">服务开始时间(单位：时间戳)&nbsp;</span></p>
    */
    @NotNull(message = "arriveTime不能为空")
    @SerializedName("arriveTime")
    private Long arriveTime;
    /**
    * <p data-diff-id="ct-diff-id-4604b9b3-fa86-4121-9ef6-f57550574445"><span style="color: rgb(31, 45, 61)">服务结束时间（单位：时间戳）</span></p>
    */
    @NotNull(message = "leaveTime不能为空")
    @SerializedName("leaveTime")
    private Long leaveTime;
    /**
    * <p data-diff-id="ct-diff-id-9cade375-aa46-4360-aaff-4a2b464f10e9"><span style="color: rgb(31, 45, 61)">订单价格 &nbsp;</span></p>
    */
    @NotBlank(message = "totalAmount不能为空")
    @SerializedName("totalAmount")
    private String totalAmount;
    /**
    * <p data-diff-id="ct-diff-id-43ffa4f7-9897-4488-a7ad-3845b95a3396"><span style="color: rgb(31, 45, 61)">购买数量</span></p>
    */
    @NotNull(message = "quantity不能为空")
    @SerializedName("quantity")
    private Integer quantity;
    /**
    * <p data-diff-id="ct-diff-id-edba4936-1f2f-429c-a2de-bc971787b85a"><span style="color: rgb(31, 45, 61)">收货人手机号&nbsp;</span></p>
    */
    @SerializedName("mobile")
    private String mobile;
    /**
    * <p data-diff-id="ct-diff-id-d405c02f-1d1f-4eb5-9cca-d26d9908fec1"><span style="color: rgb(31, 45, 61)">用户名称&nbsp;</span></p>
    */
    @SerializedName("bookName")
    private String bookName;
    /**
    * <p data-diff-id="ct-diff-id-65763b47-428b-4aa1-96a1-1e0d20debf0a"><span style="color: rgb(31, 45, 61)">用户备注 &nbsp; &nbsp;</span></p>
    */
    @SerializedName("orderRemark")
    private String orderRemark;

    public String getProductItemId() {
        return productItemId;
    }
    public void setProductItemId(String productItemId) {
        this.productItemId = productItemId;
    }
    public String getThirdPartyFulfillInfo() {
        return thirdPartyFulfillInfo;
    }
    public void setThirdPartyFulfillInfo(String thirdPartyFulfillInfo) {
        this.thirdPartyFulfillInfo = thirdPartyFulfillInfo;
    }
    public String getThirdPartyPaymentInfo() {
        return thirdPartyPaymentInfo;
    }
    public void setThirdPartyPaymentInfo(String thirdPartyPaymentInfo) {
        this.thirdPartyPaymentInfo = thirdPartyPaymentInfo;
    }
    public String getGeneralBizData() {
        return generalBizData;
    }
    public void setGeneralBizData(String generalBizData) {
        this.generalBizData = generalBizData;
    }
    public Long getArriveTime() {
        return arriveTime;
    }
    public void setArriveTime(Long arriveTime) {
        this.arriveTime = arriveTime;
    }
    public Long getLeaveTime() {
        return leaveTime;
    }
    public void setLeaveTime(Long leaveTime) {
        this.leaveTime = leaveTime;
    }
    public String getTotalAmount() {
        return totalAmount;
    }
    public void setTotalAmount(String totalAmount) {
        this.totalAmount = totalAmount;
    }
    public Integer getQuantity() {
        return quantity;
    }
    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    public String getOrderRemark() {
        return orderRemark;
    }
    public void setOrderRemark(String orderRemark) {
        this.orderRemark = orderRemark;
    }


    @Override
    public MeituanResponse<CreateandprepayorderResponse> deserializeResponse(String response) {
        Type type = new TypeToken<MeituanResponse<CreateandprepayorderResponse>>(){}.getType();
        return JsonUtil.fromJson(response, type);
    }
    @Override
    public String serializeToJson() {
        return JsonUtil.toJson(this);
    }


    @Override
    public String toString() {
        return "CreateandprepayorderRequest{" + "productItemId=" + productItemId + "," + "thirdPartyFulfillInfo=" + thirdPartyFulfillInfo + "," + "thirdPartyPaymentInfo=" + thirdPartyPaymentInfo + "," + "generalBizData=" + generalBizData + "," + "arriveTime=" + arriveTime + "," + "leaveTime=" + leaveTime + "," + "totalAmount=" + totalAmount + "," + "quantity=" + quantity + "," + "mobile=" + mobile + "," + "bookName=" + bookName + "," + "orderRemark=" + orderRemark + "}";
    }
}
